package com.seven.commons;
import	java.lang.annotation.Native;
import	java.net.SocketException;


import java.lang.reflect.Method;
import java.util.Map;

/**
 * @projectname:common-utils
 * @author: sevenDay
 * @date: 2019/7/29 22:45
 * @desc:
 * 假如你有一个类B<T>想得到这个类的泛型T的类型只要加入下面两句话
 *
 * ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
 * Class<T> clazz = (Class<T>) pt.getActualTypeArguments()[0];
 *  此时clazz内就是泛型<T>的真实类型，
 *
 * 可以这么得到泛型的实际限定名：
 *
 * String className = clazz.getCanonicalName();
 *  这个className里面就是泛型<T>的限定名了
 * 原文：https://blog.csdn.net/u010559312/article/details/84603468
 * 版权声明：本文为博主原创文章，转载请附上博文链接！
 */
public class ReflectUtils<T> {

    public static Class<?> getMethodTypeClass(String methodName, Class<?> clazz,Class<?>... parameterTypes) {
        try {
            final Method declaredMethod = clazz.getDeclaredMethod(methodName, parameterTypes);
            return declaredMethod.getReturnType();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
            throw new IllegalArgumentException("方法调用出错...");
        }
    }

    public  T  getName(T t){

        return t;
    }

    public static void main(String[] args) {

    }

}
